package br.edu.universo.si.projeto2.infojob.client.apresentacao;

import java.util.Date;

import br.edu.universo.si.projeto2.infojob.client.bean.BeanEmpresaAssinante;
import br.edu.universo.si.projeto2.infojob.client.componentes.dialogboxes.ConfirmationDialogBox;
import br.edu.universo.si.projeto2.infojob.client.componentes.dialogboxes.ErrorDialogBox;
import br.edu.universo.si.projeto2.infojob.client.componentes.dialogboxes.SuccessDialogBox;
import br.edu.universo.si.projeto2.infojob.client.util.Util;

import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.DockPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.Widget;

public class AEmpresa extends DockPanel
{
	private AMenuEmpresa aMenuEmpresa;
	private ATopAssinante aTopAssinante;

	private AAlteraDadosEmpresa aAlteraDadosEmpresa;
	private AEmpresaPerfil aEmpresaPerfil;
	private ACadastroVagas aCadastroVagas;
	private AListaVagasEmAberto aListaVagasEmAberto;
	private AListaVagasEncerradas aListaVagasEncerradas;
	private ABuscaProfissionais aBuscaProfissionais;
	private ACaixaEntrada aCaixaEntrada;
	private ACaixaSaida aCaixaSaida;
	private ANovaMensagem aRealizaDenuncia;

	public AEmpresa(final BeanEmpresaAssinante bEmpresaAssinante)
	{
		this.setSpacing(10);
		aMenuEmpresa = new AMenuEmpresa();

		aTopAssinante = new ATopAssinante();
		aTopAssinante.adicionar(new HTML("" + new Date().toString()));		
		aTopAssinante.adicionar(new HTML("<b>" + bEmpresaAssinante.getConta().toUpperCase() + "</b>"));

		this.add(aTopAssinante, DockPanel.NORTH);
		this.add(aMenuEmpresa, DockPanel.WEST);

		// ALTERAR CONTA
		aMenuEmpresa.getAlteraContaLink().addClickListener(
			new ClickListener()
			{
				public void onClick(Widget sender)
				{
					limparCentro();
					aAlteraDadosEmpresa = new AAlteraDadosEmpresa(bEmpresaAssinante);
					AEmpresa.this.add(aAlteraDadosEmpresa, DockPanel.CENTER);
				}
			}
		);

		// PERFIL
		aMenuEmpresa.getPerfilLink().addClickListener(
			new ClickListener()
			{
				public void onClick(Widget sender)
				{
					limparCentro();
					aEmpresaPerfil = new AEmpresaPerfil(bEmpresaAssinante);
					AEmpresa.this.add(aEmpresaPerfil, DockPanel.CENTER);
				}
			}
		);

		// ALTERAR SENHA
		aMenuEmpresa.getAlterarSenhaLink().addClickListener(
			new ClickListener()
			{
				public void onClick(Widget sender)
				{
					AAlteraSenha viewAlterarSenha = new AAlteraSenha(bEmpresaAssinante.getConta());
					viewAlterarSenha.center();
					viewAlterarSenha.show();
				}
			}
		);
		
		// CX. DE ENTRADA
		aMenuEmpresa.getCaixaEntradaMensagensLink().addClickListener(
			new ClickListener()
			{
				public void onClick(Widget sender)
				{
					limparCentro();

					aCaixaEntrada = new ACaixaEntrada();
					AEmpresa.this.add(aCaixaEntrada, DockPanel.CENTER);
				}
			}
		);

		// CX. DE SAIDA
		aMenuEmpresa.getMensagensEnviadasLink().addClickListener(
			new ClickListener()
			{
				public void onClick(Widget sender)
				{
					limparCentro();

					aCaixaSaida = new ACaixaSaida();
					AEmpresa.this.add(aCaixaSaida, DockPanel.CENTER);
				}
			}
		);

		// Realiza Denuncia
		aMenuEmpresa.getRealizaDenunciaLink().addClickListener(
				new ClickListener()
				{
					public void onClick(Widget sender)
					{
						limparCentro();

						aRealizaDenuncia = new ANovaMensagem(61);
						aRealizaDenuncia.show();
						aRealizaDenuncia.center();
					}
				}
		);		
		
		// LOGOFF
		aMenuEmpresa.getLogoffLink().addClickListener(
			new ClickListener()
			{
				public void onClick(Widget sender)
				{
					final AsyncCallback cbSessao = new AsyncCallback()
					{
						public void onSuccess(Object result)
						{
							RootPanel.get().remove(AEmpresa.this);
							RootPanel.get().add(new APrincipal());								
						};

						public void onFailure(Throwable caught)
						{
							ErrorDialogBox errorDialogBox = new ErrorDialogBox("Erro ao finalizar sessão: " + caught.getMessage());

							errorDialogBox.center();
							errorDialogBox.show();
						};
					};

					// confirmacao para encerrar a sessao
					ConfirmationDialogBox confirmDialogBox = new ConfirmationDialogBox(
							"Tem certeza que deseja efetuar logoff?",
							new ConfirmationDialogBox.ConfirmCallback()
							{
								public void execute(String btnId)
								{
									if (btnId.equalsIgnoreCase("s"))
									{
										Util.getService().logoff(cbSessao);
									}
								}
							}
					);

					confirmDialogBox.center();
					confirmDialogBox.show();
				}
			}
		);

		// CRIAR NOVA VAGA...
		aMenuEmpresa.getCadastrarVagasLink().addClickListener(
				new ClickListener()
				{
					public void onClick(Widget sender)
					{
						limparCentro();
						aCadastroVagas = new ACadastroVagas(bEmpresaAssinante);
						AEmpresa.this.add(aCadastroVagas, DockPanel.CENTER);
					}
				}
			);

		// LISTAR VAGAS
		aMenuEmpresa.getListarVagasEmAbertoLink().addClickListener(
				new ClickListener()
				{
					public void onClick(Widget sender)
					{
						limparCentro();
						aListaVagasEmAberto = new AListaVagasEmAberto(bEmpresaAssinante);
						AEmpresa.this.add(aListaVagasEmAberto, DockPanel.CENTER);
					}
				}
			);
		
		aMenuEmpresa.getListarVagasEncerradasLink().addClickListener(
				new ClickListener()
				{
					public void onClick(Widget sender)
					{
						limparCentro();
						aListaVagasEncerradas = new AListaVagasEncerradas(bEmpresaAssinante);
						AEmpresa.this.add(aListaVagasEncerradas, DockPanel.CENTER);
					}
				}
			);

		// BUSCA DE PROFISSIONAIS
		aMenuEmpresa.getBuscarProfissionaisLink().addClickListener(
				new ClickListener()
				{
					public void onClick(Widget sender)
					{
						limparCentro();
						aBuscaProfissionais = new ABuscaProfissionais();
						AEmpresa.this.add(aBuscaProfissionais, DockPanel.CENTER);
					}
				}
			);

		// CX. DE ENTRADA
		aMenuEmpresa.getCaixaEntradaMensagensLink().addClickListener(
			new ClickListener()
			{
				public void onClick(Widget sender)
				{
					limparCentro();

					aCaixaEntrada = new ACaixaEntrada();
					AEmpresa.this.add(aCaixaEntrada, DockPanel.CENTER);
				}
			}
		);

		// CX. DE SAIDA
		aMenuEmpresa.getMensagensEnviadasLink().addClickListener(
			new ClickListener()
			{
				public void onClick(Widget sender)
				{
					limparCentro();

					aCaixaSaida = new ACaixaSaida();
					AEmpresa.this.add(aCaixaSaida, DockPanel.CENTER);
				}
			}
		);

		// ENCERRAR CONTA
		aMenuEmpresa.getEncerraContaLink().addClickListener(
			new ClickListener()
			{
				public void onClick(Widget sender)
				{
					final AsyncCallback cbEncerraContaEmpresa = new AsyncCallback()
					{
						public void onSuccess(Object result)
						{
							SuccessDialogBox successDialogBox = new SuccessDialogBox(
									"Conta encerrada com sucesso",
									new SuccessDialogBox.SuccessCallback()
									{
										public void execute()
										{
											RootPanel.get().remove(AEmpresa.this);
											RootPanel.get().add(new APrincipal());
										}
									}
							);

							successDialogBox.center();
							successDialogBox.show();
						};


						public void onFailure(Throwable caught)
						{
							ErrorDialogBox errorDialogBox = new ErrorDialogBox("Erro ao tentar encerrar conta: " + caught.getMessage());

							errorDialogBox.center();
							errorDialogBox.show();
						};
					};


					ConfirmationDialogBox confirmDialogBox = new ConfirmationDialogBox(
							"Você tem certeza que deseja encerrar sua conta?",
							new ConfirmationDialogBox.ConfirmCallback()
							{
								public void execute(String btnId)
								{
									if (btnId.equalsIgnoreCase("s"))
									{
										Util.getService().encerrarContaEmpresa(bEmpresaAssinante, cbEncerraContaEmpresa);
									}
								}
							}
					);

					confirmDialogBox.center();
					confirmDialogBox.show();
				}
			}
		);
		

	}

	// limpa o miolo da tela HUAUA
	public void limparCentro()
	{
		if(aEmpresaPerfil != null)
		{
			AEmpresa.this.remove(aEmpresaPerfil);
		}

		if (aAlteraDadosEmpresa != null)
		{
			AEmpresa.this.remove(aAlteraDadosEmpresa);
		}

		if (aCaixaEntrada != null)
		{
			AEmpresa.this.remove(aCaixaEntrada);
		}

		if (aCaixaSaida != null)
		{
			AEmpresa.this.remove(aCaixaSaida);
		}

		if (aCadastroVagas != null)
		{
			AEmpresa.this.remove(aCadastroVagas);
		}

		if (aListaVagasEncerradas != null)
		{
			AEmpresa.this.remove(aListaVagasEncerradas);
		}

		if (aListaVagasEmAberto != null)
		{
			AEmpresa.this.remove(aListaVagasEmAberto);
		}
		
		if (aBuscaProfissionais != null)
		{
			AEmpresa.this.remove(aBuscaProfissionais);
		}
	}
}